import Vue from 'vue'; // 导入vue框架
import Vuex from "vuex"; // 导入vuex插件

Vue.use(Vuex); // 将vuex安装到vue上

// 初始化购物车商品数量
let defaultCartNum = 0;
if (localStorage.getItem("cartList")) {
    defaultCartNum = JSON.parse(localStorage.getItem("cartList")).reduce((temp, goods) => {
        return temp + goods.num;
    }, 0);
}

// 初始化所在地
let defaultPlace = "上海";
if (localStorage.getItem("place")) {
    defaultPlace = JSON.parse(localStorage.getItem("place"));
}

/**
 * state
 * 用于初始化状态
 */
const state = {
    cartNum: defaultCartNum,
    lecakePlace: defaultPlace,
}

/**
 * getters
 * 用于存储state中状态的get方法
 * 是访问state对象中定义的状态的必经之路
 */
const getters = {
    // 可不写
}

/**
 * mutations
 * 用于存储修改state中状态的方法
 * 同步更新,不能在该方法中异步请求数据
 */
const mutations = {
    setCartNum(state, param) {
        return state.cartNum += param;
    },
    setPlace(state, place) {
        return state.lecakePlace = place;
    }
}

/**
 * actions
 * 用于存储修改state中状态的方法
 * 异步更新,不能直接在该方法中更新state中状态，需要调用mutations中的方法完成最终更新;可发送异步请求
 */
const actions = {
    setCartNumAsync(content, param) {
        // this.axios({
        //     url: "接口"
        // }).then(res => {
        //     content.commit("setCartNum", param)
        // })
    }
}

// 声明store仓库实例
const store = new Vuex.Store({
    state,
    getters,
    mutations,
    actions
});

export default store; // 导出仓库